Version 2.15.0-268.1.beta

Merge '2.15.0-268.0.dev' into beta
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,